﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;


using HHo_Negocio;
using HHo_Model;
using System.Text;

//using RyM.Seguridad2003.Componente;


public partial class trabajo_wfPrgTrab : UISeguridad
{

#region "CONSTANTES"
    private const String MSG_FORMAT_ING_FEC = "dd/mm/aaaa - 00:00 (24hrs)";
    private const bool ES_TRAB_PROGRAMADO = true;
    private const bool NO_ES_TRAB_PROGRAMADO = false;
    private readonly DateTime DT_INVALIDA = DateTime.Parse("01/01/0001");

#endregion

#region VARIABLES
    private decimal _hhTrabajos;
    private decimal _hhPersonas;
    private string _msgErrorPersonalizado;
    private bool _faltaDatosProgramacion = true;

    private GestorTblParametros oGesParam;
    private GestorTrabajos oGesTrab;
    private E_Usuario eUser;

#endregion

    

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["UsuarioAuth"] != null)
        {
            eUser = (E_Usuario)Session["UsuarioAuth"];

            this.ClientScript.GetPostBackEventReference(this, string.Empty);
            if (!Page.IsPostBack)
            {
                //Validar si tiene permiso a la pagina actual
                if(!EstaPermitidoPagina(eUser,"wfPrgTrab.aspx"))
                {
                    ShowMessage("Aviso, sus credenciales no cuentan con el permiso para accesar");
                    Response.Redirect("../general/wfIndex.aspx",false);
                }
                //Construye el menu con el componente de seguridad
                lblMenu.Text = MenuConSeguridad(eUser,1);

                ListItem lst = new ListItem();
                lst.Text = StringConstantes.DDL_SELEC_TEXT;
                lst.Value = StringConstantes.DDL_SELEC_VALUE;
                try
                {
                    HHo_Negocio.GestorTblParametros oGestParam = new GestorTblParametros();

                    _msgErrorPersonalizado = "Obteniedo Areas";
                    ddl_ProdLin.DataSource = oGestParam.ListaParametroPorGrupo(6);
                    ddl_ProdLin.DataTextField = StringConstantes.DDL_BIND_PARAM_VAL_TEXT_FIELD;
                    ddl_ProdLin.DataValueField = StringConstantes.DDL_BIND_PARAM_VAL_VALUE_FIELD;
                    ddl_ProdLin.DataBind();

                    _msgErrorPersonalizado = "Obteniedo Participaciones";
                    ddlParticipacion.DataSource = oGestParam.ListaParametroPorGrupo(5);
                    ddlParticipacion.DataTextField = StringConstantes.DDL_BIND_PARAM_VAL_TEXT_FIELD;
                    ddlParticipacion.DataValueField = StringConstantes.DDL_BIND_PARAM_VAL_VALUE_FIELD;
                    ddlParticipacion.DataBind();

                    _msgErrorPersonalizado = "Obteniedo Porceje de ajuste para trabajos no programados";
                    hid_PTNP.Value = oGestParam.ObtenerValorParamtroPorID(oGestParam.ObtenerParamID(1, StringConstantes.PAR_COD_PORC_TRAB_NO_PRG));
                    lblEstPrg.Visible = false;

                    HabilitarEliminacion(false);
                    HabilitarGrabacion(false);
                    HabilitarModificacion(false);
                    HabilitarHabilitacion(false);

                }
                catch (Exception ex)
                {
                    //ShowMessage("ExecptioLoad", "ERROR del sistema: " + _msgErrorPersonalizado + " " + ex.Message);
                    Response.Write("<strong>ERROR DEL SISTEMA: <strong><br/>Ha ocurrido un error al cargar la página, por favor notifique al administrador del sistema: " + ex.Message);

                }
            }
            else if (Request.Form["__eventtarget"] == "cambiosRealizados")
            {
                ConsultarExistenciaTrabajos();        //PoblarGridTrabajos();
            }
            if ((Request.QueryString["idt"] != null) && (Request.QueryString["s"] == "1"))
            {
                if (Request.QueryString["idt"].ToString().Length > 0)
                {
                    //hid_IdInfTra.Value = Session["IdTrabajo"].ToString();
                    ConsultarExistenciaTrabajos(Int32.Parse(Request.QueryString["idt"].ToString()));
                }
            }
        }
        else
        {
            Session.Abandon();
            Response.Redirect("../wfLogin.aspx", false);
        }
    }

    private void PoblarGridTrabajos()
    {
        try
        {
            if (Int32.Parse(hid_IdInfTra.Value) != 0)
            {
                oGesTrab = new GestorTrabajos();
                gvTrab.DataSource = oGesTrab.ConsultarTrabajoPorInforme(Int32.Parse(hid_IdInfTra.Value));
                gvTrab.DataBind();
                if (gvTrab.Rows.Count > 0)
                {
                    gvTrab.Visible = true;
                }
            }
            else
            {
                ShowMessage("ObtIdTrabajo", "ERROR: No se puede obtener el identificador del trabajo");
            }
        }
        catch (Exception ex)
        {
            //ShowMessage("Exception_Trabajos","ERROR del Sistema: " + ex.Message);
            Response.Write("<strong>ERROR DEL SISTEMA: <strong><br/>Ha ocurrido un error al cargar la página, por favor notifique al administrador del sistema: " + ex.Message);
        }            
    }

    private bool ValidarDatosConsultaInforme()
    {
        if ((ddl_ProdLin.SelectedValue.ToString().Length < 1) && (txtFecPrg.Text.Length < 1) && (txtMatAvi.Text.Length < 1))
            return false;
        else
            return true;
    }
    
    private void DeshabilitarEdicion(bool SoloLectura)
    {
        txtFecVuelo.ReadOnly = SoloLectura;
        txtETA.ReadOnly = SoloLectura;
        txtETD.ReadOnly = SoloLectura;
        txtFecETA.ReadOnly = SoloLectura;
        txtHraETA.ReadOnly = SoloLectura;
        txtFecETD.ReadOnly = SoloLectura;
        txtHraETD.ReadOnly = SoloLectura;
        btnDatosPizarra.Enabled = !SoloLectura;
        chkTransMantto.Enabled = !SoloLectura;              
    }

    //Restablece a la pantalla inicial
    private void LimpiarControles()
    {
        txtFecVuelo.Text = "";
        txtETA.Text = "";
        txtETD.Text = "";
        txtFecETA.Text = "";
        txtHraETA.Text = "";
        txtFecETD.Text = "";
        txtHraETD.Text = "";
        txtParticipante.Text = "";

        lblHraETA.Text = MSG_FORMAT_ING_FEC;
        lblHraETD.Text = MSG_FORMAT_ING_FEC;
        lblTATTEM.Text = "";
        lblEstPrg.Text = "";
        
        //lblTotHHTrab.Text = "";
        //lblTotHHPers.Text = "";

        //lblDatPizMensaje.Text = "";
        //lblMsgMotivoCambio.Text = "";


        //gvParticipantes.Visible = false;
        gvParticipantes.DataSource = null;
        gvParticipantes.DataBind();

        gvTrab.DataSource = null;
        gvTrab.DataBind();
        //gvTrab.Visible = false;

        txtJustifCambio.Text = "";



        hid_HabIngManual.Value = "";
        hidEstRegistro.Value = "";
        hid_TEM.Value = "";
        hid_IdInfTra.Value = "";
        hid_PTNP.Value = "";

        chkTransMantto.Checked = false;
    }

    private void PoblarControles(E_Trabajo oEntTrabajo)
    {
        oGesParam = new GestorTblParametros();
        hid_IdInfTra.Value = oEntTrabajo.Id.ToString();

        if (oEntTrabajo.HorasTAT != DT_INVALIDA && oEntTrabajo.HorasTEM != DT_INVALIDA)
            _faltaDatosProgramacion = false;

        txtFecVuelo.Text = oEntTrabajo.FechaVuelo.ToShortDateString();
                
        txtETA.Text = oEntTrabajo.NumeroETA;
        txtETD.Text = oEntTrabajo.NumeroETD;        
        chkTransMantto.Checked = oEntTrabajo.EsTrabMantto;
        //Obtener el Porcentaje de TNP
        hid_PTNP.Value = oEntTrabajo.PorcentTrabNoProg.ToString();
        
        MostrarTATTEM(oEntTrabajo.HoraLlegada, oEntTrabajo.HoraSalida, oEntTrabajo.EsTrabMantto);
        lblEstPrg.Visible = true;

        lblEstPrg.Text = oGesParam.ObtenerValorParamtroPorID(oEntTrabajo.IdEstadoInforme);        
        
        lblHraETA.Text = oEntTrabajo.HoraLlegada.ToString("dd/MM/yyyy HH:m");            
        lblHraETD.Text = oEntTrabajo.HoraSalida.ToString("dd/MM/yyyy HH:m");

        //if (oEntTrabajo.EsRegistroManual == true)
        //    lblDatPizMensaje.Text = "Ingreso manual de datos, no se tenia información en la pizarra electronica";
        //else
        //{
        //    if (!_faltaDatosProgramacion)
        //        lblDatPizMensaje.Text = "Los datos se han obtenido de la pizarra electronica";
        //    else
        //        lblDatPizMensaje.Text = "No se ha registrado información";
        //}

        txtFecETA.Text = oEntTrabajo.HoraLlegada.ToShortDateString();
        txtHraETA.Text = oEntTrabajo.HoraLlegada.ToShortTimeString();
        txtFecETD.Text = oEntTrabajo.HoraSalida.ToShortDateString();
        txtHraETD.Text = oEntTrabajo.HoraSalida.ToShortTimeString();

        if (oEntTrabajo.IdMotivCambio > 0)
        {
            divMotivCambio.Style.Remove("Display");
            divMotivCambio.Style.Add("Display", "block");
                        
            txtJustifCambio.Text = oEntTrabajo.TextJustifCambio;
            txtJustifCambio.ReadOnly = true;
        }
        else
        {
            divMotivCambio.Style.Remove("Display");
            divMotivCambio.Style.Add("Display", "none");
        }

        hidEstRegistro.Value = oEntTrabajo.IdEstadoInforme.ToString();
    }

    private void CancelarEdicionControles(bool EstaDesabilitado)
    {
        // true para deshabilitar controles
        txtFecVuelo.ReadOnly = EstaDesabilitado;
        txtETA.ReadOnly = EstaDesabilitado;
        txtETD.ReadOnly = EstaDesabilitado;        
    }



    public void ConsultarExistenciaTrabajos(int IdInfTrab)
    {
        //divMain.Style.Clear();
        E_Trabajo oEntidadTrabajo;
        GestorTblParametros oGestParam;
        try
        {            
        
        HHo_Negocio.GestorTrabajos oGestTrabajo = new GestorTrabajos();        
        _msgErrorPersonalizado = "Consultar Informe de Trabajo";
        oEntidadTrabajo = oGestTrabajo.ConsultarInformeTrabajo(IdInfTrab);

        //Si No existe la programacion o estado = eliminado se debe permitir el registro de otra programacion
        oGestParam = new GestorTblParametros();
        if (oEntidadTrabajo.Id == 0 || oEntidadTrabajo.IdEstadoInforme == oGestParam.ObtenerParamID(8, "EL"))
        {
            LimpiarControles();
            DeshabilitarEdicion(false);
            imgRegInforme.Enabled = true; //poner activo su color;
            imgRegInforme.ImageUrl = "../styles/a-main/bot_guardar_act.gif";
            imgEditInforme.Enabled = false;
            imgEditInforme.ImageUrl = "../styles/a-main/bot_lapiz_dis.gif";
            //lblEstInf.Visible = false;
            //                Session.Remove("IdInfTrab");            
            hid_IdInfTra.Value = "";
            //                lblModoFrm.Text = "Ingreso de datos";
            //                lblModoFrm.Visible = true;
            //divMain.Style.Clear();
            //divMain.Style.Add("display", "block");
        }
        else
        {
            if (oEntidadTrabajo.EsProgramacion == true)
            {
                LimpiarControles();

                _msgErrorPersonalizado = "Poblando Datos";
                PoblarControles(oEntidadTrabajo);
                txtFecPrg.Text = oEntidadTrabajo.FechaInforme.ToShortDateString();
                txtMatAvi.Text = oEntidadTrabajo.MatriculaAvion;

                DeshabilitarEdicion(true);
                // Si está habilitado, ya no se puede hacer nada.
                if (oEntidadTrabajo.IdEstadoInforme == oGestParam.ObtenerParamID(8, "PH"))
                {
                    //DeshabilitarCierreProg(true);
                    HabilitarAccionHabilitar(false);
                    //HabilitarAccionEdicion(false);

                }
                else
                {
                    HabilitarIngresoTrabajos(true);
                    HabilitarAccionHabilitar(true);
                    //HabilitarAccionEdicion(true);
                    //DeshabilitarCierreProg(false); 
                }
                imgEditInforme.Visible = true;

                hid_IdInfTra.Value = oEntidadTrabajo.Id.ToString();
                //                    Session["IdInfTrab"] = oEntidadTrabajo.Id.ToString();
                //Poblar Los detalles del trabajos
                _msgErrorPersonalizado = "Poblando Datagrid de trabajos";
                PoblarGridTrabajos();

                //Poblar Participantes
                _msgErrorPersonalizado = "Poblando Participantes";
                PoblarParticipantes(Int32.Parse(hid_IdInfTra.Value));

                //AjusteParamProgramacion();
//                ObtResumenTotalHH(Int32.Parse(hid_IdInfTra.Value), Convert.ToDecimal(StringConstantes.DEC_VAL_REP_NULL)); //comodin para decir NULL                        

                //divMain.Style.Remove("Display");
                //divMain.Style.Add("display", "block");
                divDatosVuelo.Style.Remove("Display");
                divDatosVuelo.Style.Add("Display", "block");

                HabilitarIngresoManual(false, false);
            }
            else
            {
                LimpiarControles();
                ShowMessage("NOTA", "NOTA: El sistema ya registra un informe para la fecha y avión, por favor verifique los datos ingresados.");
                return;
            }
        }        
        }
        catch (Exception ex)
        {
            oEntidadTrabajo = null;
            oGestParam = null;
            //ShowMessage("ERROR: " + _msgErrorPersonalizado + " INFORMACIÓN TÉCNICA: " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>Ha ocurrido un error al consultar los trabajos, por favor notifique al administrador del sistema: " + _msgErrorPersonalizado + "<br/>"+ ex.Message);
        }
    }


    public void ConsultarExistenciaTrabajos()
    {
        LimpiarControles();

        divMotivCambio.Style.Remove("Display");
        divMotivCambio.Style.Add("Display", "none");
        divPersPrg.Style.Remove("display");
        divPersPrg.Style.Add("display", "none");
        divTrabPrg.Style.Remove("display");
        divTrabPrg.Style.Add("display", "none");
        //divMain.Style.Remove("display");
        //divMain.Style.Add("display", "none");

        HabilitarEliminacion(false);
        HabilitarGrabacion(false);
        HabilitarModificacion(false);
        HabilitarHabilitacion(false);
        HabilitarCalculoTATTEM(false);
        HabilitarIngresoMecanicos(false);
        HabilitarIngresoTrabajos(false);
        HabilitarIngresoManual(false, false);
        
        E_Trabajo oEntidadTrabajo;
        bool ExisteMatricula = false;                
        imgEditInforme.ToolTip = "Activar para modificar la programación";        

        try
        {
            //Verificar que se tenga los datos ingresados
            if (ValidarDatosConsultaInforme())
            {
                string strMatAvion;
                oGesTrab = new GestorTrabajos();
                oGesParam = new GestorTblParametros();

                _msgErrorPersonalizado = "Comprobando Matricula, imgConsultaPrg_Click";
                strMatAvion = HH_Toolkit.AsegurarFormatoMatricula(txtMatAvi.Text); 
                
                //Comprobar la existencia de Matricula en el PMS
                try
                {
                    ExisteMatricula = HH_Toolkit.ValidarExistenciaMat(strMatAvion);
                }
                catch (Exception ex)
                {
                    //ShowMessage("ExepcionMatricula","ERROR: al validar la matricula " + ex.Message);
                    Response.Write("<strong>ERROR: <strong><br/>Ha ocurrido un error al validar la matricula del avión, por favor notifique al administrador del sistema: " + ex.Message);
                    return;
                }

                if (ExisteMatricula)
                {
                    _msgErrorPersonalizado = "Consultando Informe de Trabajo";
                    //try
                    //{
                        oEntidadTrabajo = oGesTrab.ConsultarInformeTrabajo(Int32.Parse(ddl_ProdLin.SelectedItem.Value), Convert.ToDateTime(txtFecPrg.Text), strMatAvion,0);
                    //}
                    //catch (Exception ex)
                    //{                    
                    //}

                   

                    //Si No existe la programacion o estado = eliminado se debe permitir el registro de otra programacion                
                        if (oEntidadTrabajo.Id == 0 || oEntidadTrabajo.IdEstadoInforme == oGesParam.ObtenerParamID(8, StringConstantes.PAR_COD_INF_EST_ELIMINADO))
                    {
                        DeshabilitarEdicion(false);
                        HabilitarGrabacion(true);
                        ShowMessage("ValidarOK", "Validación correcta, puede iniciar la programación");                        
                    }
                    else
                    {
                        if (oEntidadTrabajo.EsProgramacion == true)
                        {
                            //VERIFICAR QUE PROGRAMACIONES PASADAS NO SEAN ALTERADAS
                            if (oEntidadTrabajo.FechaInforme.Date >= DateTime.Now.Date)
                            {
                                _msgErrorPersonalizado = "Poblando Datos";
                                PoblarControles(oEntidadTrabajo);
                                // VERIFICAR EL ESTADO DEL INFORME PARA NO HACER CAMBIOS
                                if ((oEntidadTrabajo.IdEstadoInforme == oGesParam.ObtenerParamID(8, StringConstantes.PAR_COD_INF_EST_HABILITADO)) ||
                                    (oEntidadTrabajo.IdEstadoInforme == oGesParam.ObtenerParamID(8, StringConstantes.PAR_COD_INF_EST_REGISTRO)) ||
                                    (oEntidadTrabajo.IdEstadoInforme == oGesParam.ObtenerParamID(8, StringConstantes.PAR_COD_INF_EST_CERRADO))
                                    )
                                {
                                    HabilitarAccionHabilitar(false);
                                    DeshabilitarEdicion(true);
                                    imgAdicionarPers.Enabled = false;
                                    ShowMessage("DeshabProg", "AVISO: El estado actual del registro impide realizar cambios");
                                }
                                else
                                {
                                    //ESTADO DE PROGRAMACION PUEDE HACER LOS CAMBIOS
                                    HabilitarIngresoTrabajos(true);
                                    HabilitarIngresoMecanicos(true);
                                    HabilitarAccionHabilitar(true);
                                    //HabilitarAccionEdicion(true);
                                    //DeshabilitarCierreProg(false); 

                                    HabilitarModificacion(true);
                                    HabilitarHabilitacion(true);
                                    HabilitarEliminacion(true);
                                }

                                //AjusteParamProgramacion();
                                //ObtResumenTotalHH(Int32.Parse(hid_IdInfTra.Value), Convert.ToDecimal(StringConstantes.DEC_VAL_REP_NULL));
                                                                
                                //Poblar Participantes
                                divPersPrg.Style.Remove("display");
                                divPersPrg.Style.Add("display", "block");

                                _msgErrorPersonalizado = "Poblando Participantes";
                                PoblarParticipantes(Int32.Parse(hid_IdInfTra.Value));

                                //divMain.Style.Remove("Display");
                                //divMain.Style.Add("display", "block");

                                _msgErrorPersonalizado = "Poblando Datagrid de trabajos";
                                //Poblar Los detalles del trabajos
                                divTrabPrg.Style.Remove("display");
                                divTrabPrg.Style.Add("display", "block");
                                PoblarGridTrabajos();
                            }
                            else
                            {
                                ShowMessage("ValidarFecPasada","ERROR: No se puede modificar una programación pasada");
                            }
                        }
                        else
                        {
                            LimpiarControles();
                            ShowMessage("InformeReg","AVISO: El sistema ya registra un informe para la fecha y avión, por favor verifique los datos ingresados");
                            return;
                        }
                    }
                }
                else
                {
                    ShowMessage("ErrMat","ERROR: La Matricula ingresada no existe");
                }
            }
            else
            {
               ShowMessage("Format Vuelos","No se ha podido validar los datos de consulta ingresados");
            }
        }
        catch (Exception ex)
        {
            oEntidadTrabajo = null;
            oGesParam = null;
            //ShowMessage("ERROR",_msgErrorPersonalizado + " " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>Ha ocurrido un error al consultar los trabajos, por favor notifique al administrador del sistema: " + _msgErrorPersonalizado + "<br/>" + ex.Message);
        }
    }

    protected void imgConsultaPrg_Click(object sender, ImageClickEventArgs e)
    {
        ConsultarExistenciaTrabajos();        
    }

    protected void imgRegInforme_Click(object sender, ImageClickEventArgs e)
    {
        DateTime _dtFecProg;
        DateTime _dtFecVlo;

        oGesParam = new GestorTblParametros();
        oGesTrab = new GestorTrabajos();
        
        divMotivCambio.Style.Remove("Display");
        divMotivCambio.Style.Add("Display", "none");
        divPersPrg.Style.Remove("display");
        divPersPrg.Style.Add("display", "none");
        divTrabPrg.Style.Remove("display");
        divTrabPrg.Style.Add("display", "none");
        //divMain.Style.Remove("display");
        //divMain.Style.Add("display", "none");

        try
        {
            if (txtFecPrg.Text.Trim().Length != 10)
            {
                ShowMessage("ValidFechProg", "Ingrese una fecha de programación valida");
                return;
            }

            if (txtFecVuelo.Text.Trim().Length != 10)
            {
                ShowMessage("ValidFechVlo", "Ingrese una fecha de vuelo valida");
                return;
            }

            _dtFecProg = Convert.ToDateTime(txtFecPrg.Text.Trim());
            _dtFecVlo = Convert.ToDateTime(txtFecVuelo.Text.Trim());

            if (_dtFecVlo < _dtFecProg)
            {
                ShowMessage("Error_FecVloMenorFecPrg", "No se puede programar para una fecha de vuelo menor que la fecha de programación");
                return;
            }
        }
        catch (Exception ex)
        {
            Response.Write("<strong>ERROR: <strong><br/>Ha ocurrido un error al validar la matricula del avión, por favor notifique al administrador del sistema: " + ex.Message);
        }        

        //Verifica la configuración para determinar que se permita programar fechas de vuelo y aviones repetidos
        //TODO - Pase a produccion configurar para que no sea permitido.
        try
        {
            if (oGesParam.ObtenerValorParamtroPorID(oGesParam.ObtenerParamID(1, "PERMREPFVLO")) != "SI")
            {
                if (oGesTrab.ValidaUnicoVueloDia(Convert.ToInt32(ddl_ProdLin.SelectedValue), StringConstantes.PREF_AVION + txtMatAvi.Text,
                Convert.ToDateTime(txtFecVuelo.Text)) != 0)
                {
                    ShowMessage("FecVloRep","La fecha de vuelo de este avión ya ha sido programado");
                    return;
                }
            }
        }
        catch (Exception ex)
        {
            //ShowMessage("ExceptionFecVlo","No se pudo verificar la fecha de vuelo Mensaje de Error: " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>No se pudo verificar la fecha de vuelo, por favor notifique al administrador del sistema: " + ex.Message);
            return;
        }
        
        // Grabar si no existe el trabajo
        if (hid_IdInfTra.Value.Length <= 0)
        {   
            E_Trabajo oTrabajo = new E_Trabajo();
            bool _esIngresoTATTEMManual = false;
            Decimal decHHDescuentoLugarTrab;
            string strMatAvion;
            
            if (hid_HabIngManual.Value.Length >= 6)
                _esIngresoTATTEMManual = true;
            
            try
            {
                strMatAvion = HH_Toolkit.AsegurarFormatoMatricula(txtMatAvi.Text);

                oTrabajo.EsRegistroManual = _esIngresoTATTEMManual;
                oTrabajo.IdArea = Int32.Parse(ddl_ProdLin.SelectedValue);
                oTrabajo.FechaInforme = DateTime.Parse(txtFecPrg.Text);
                oTrabajo.MatriculaAvion = strMatAvion;

                //TODO - CAMBIAR EL USUARIO QUE REGISTRA
                E_Usuario eUser = (E_Usuario)Session["UsuarioAuth"];
                oTrabajo.UserRegistra = eUser.UsrId;

                if (txtFecVuelo.Text.Length == 0)
                {
                    oTrabajo.FechaVuelo = StringConstantes.DT_FEC_INVALID;
                }
                else
                {
                    oTrabajo.FechaVuelo = DateTime.Parse(txtFecVuelo.Text);
                }

                oTrabajo.NumeroETA = txtETA.Text;
                oTrabajo.NumeroETD = txtETD.Text;

                if (txtFecETA.Text.Length == 10 || lblHraETA.Text.Length != 26)
                    oTrabajo.HoraLlegada = HH_Toolkit.ConvertirDateTime(txtFecETA.Text, txtHraETA.Text, lblHraETA.Text);

                if (txtFecETD.Text.Length == 10 || lblHraETD.Text.Length != 26)
                    oTrabajo.HoraSalida = HH_Toolkit.ConvertirDateTime(txtFecETD.Text, txtHraETD.Text, lblHraETD.Text);
                
                if (chkTransMantto.Checked)
                    decHHDescuentoLugarTrab = Convert.ToDecimal(oGesParam.ObtenerValorParamtroPorID(oGesParam.ObtenerParamID(1, "TDCTOMANTTO")));
                else
                    decHHDescuentoLugarTrab = Convert.ToDecimal(oGesParam.ObtenerValorParamtroPorID(oGesParam.ObtenerParamID(1, "TDCTOPISTA")));

                oTrabajo.DctoHraLugarTrab = decHHDescuentoLugarTrab;

                oTrabajo.EsTrabMantto = chkTransMantto.Checked;
                oTrabajo.EsProgramacion = true;

                hid_IdInfTra.Value = oGesTrab.RegistrarInformeTrabajo(oTrabajo).ToString();
                ShowMessage("Se ha creado correctamente la programacion");
                DeshabilitarEdicion(false);
                HabilitarIngresoTrabajos(true);
                HabilitarIngresoMecanicos(true);

                divPersPrg.Style.Remove("display");
                divPersPrg.Style.Add("display", "block");
                divTrabPrg.Style.Remove("display");
                divTrabPrg.Style.Add("display", "block");
                //divMain.Style.Remove("display");
                //divMain.Style.Add("display", "block");

                HabilitarModificacion(true);
                HabilitarHabilitacion(true);
                HabilitarEliminacion(true);
                HabilitarGrabacion(false);
            }
            catch (Exception ex)
            {
                //ShowMessage("Exception_Grab","ERROR: Al realizar el registro. " + ex.Message);
                Response.Write("<strong>ERROR: <strong><br/>No se pudo realizar el registro, por favor notifique al administrador del sistema: " + ex.Message);
                //throw;
            }
        }
    }

    // Calcular TATTEM
    private void MostrarTATTEM(DateTime HoraLlegada, DateTime HoraSalida, bool EsTrabMantto)
    {
        GestorTblParametros oGesPar = new GestorTblParametros();
        if (EsTrabMantto)
            lblTATTEM.Text = HH_Toolkit.TextoTATTEM(HoraLlegada, HoraSalida, Decimal.ToInt32(Convert.ToDecimal(oGesPar.ObtenerValorParamtroPorID(oGesPar.ObtenerParamID(1, StringConstantes.PAR_COD_DCTO_TRAB_MANTTO)))));
        else
            lblTATTEM.Text = HH_Toolkit.TextoTATTEM(HoraLlegada, HoraSalida, Decimal.ToInt32(Convert.ToDecimal(oGesPar.ObtenerValorParamtroPorID(oGesPar.ObtenerParamID(1, StringConstantes.PAR_COD_DCTO_TRAB_PISTA)))));
    }

    private void LimpiarDivDatPizarra()
    {
        divDatosVuelo.Style.Remove("display");
        divDatosVuelo.Style.Add("Display","none");
        lblHraETA.Text = "";
        lblHraETD.Text = "";
        txtHraETA.Text = "";
        txtHraETD.Text = "";
        txtFecETA.Text = "";
        txtFecETD.Text = "";
        divDatManETA.Style.Remove("Display");
        divDatManETA.Style.Add("Display","none");
        divDatManETD.Style.Remove("Display");
        divDatManETD.Style.Add("Display","none");
        divDatPizETA.Style.Remove("Display");
        divDatPizETA.Style.Add("Display","none");
        divDatPizETD.Style.Remove("Display");
        divDatPizETD.Style.Add("Display","none");

        hid_TEM.Value = "";
        hid_HabIngManual.Value = "";
        lblTATTEM.Text = "";
    }

    protected void btnDatosPizarra_Click(object sender, ImageClickEventArgs e)
    {
        //RS VALIDAR LA FECHA DE PROGRAMACIÒN MAYOR QUE LA FECHA DE INFORME

        GestorPizarra oPizarra;
        bool HabETA = false;
        bool HabETD = false;
        string strMatAvion;
        string DatosArribo;
        string[] strFecVuelo;
        
        oPizarra = new GestorPizarra();
        LimpiarDivDatPizarra();

        //DatosArribo = new string;        
        strFecVuelo = new string[3];
        strFecVuelo = txtFecVuelo.Text.Split('/');

        string strFecConsultaVuelo = strFecVuelo[2] + strFecVuelo[1] + strFecVuelo[0];
        strMatAvion = HH_Toolkit.AsegurarFormatoMatricula(txtMatAvi.Text);//ComprobarMatricula();
                
        divDatosVuelo.Style.Clear();
        divDatosVuelo.Style.Add("display","block");

        try
        {
            _msgErrorPersonalizado = "Consultando Pizarra";
            DatosArribo = oPizarra.ObtETAETDTATTEM(strFecConsultaVuelo.ToString(), strMatAvion, txtETA.Text, txtETD.Text);

            string[] DatosArriboSplit;
            DatosArriboSplit = DatosArribo.Split('|');

            if ((DatosArriboSplit[0].Length <= 0) && (DatosArriboSplit[1].Length <= 0))
            {
                HabETA = true;
                HabETD = true;
                ShowMessage("ValidPizarra", "No existe información en la pizarra, se habilita el ingreso manual");                
                hid_HabIngManual.Value = "manualETAETD";
            }
            else
            {
                if (DatosArriboSplit[0].Length > 0)
                {
                    lblHraETA.Text = DatosArriboSplit[0];
                    lblHraETA.Visible = true;
                    HabETA = false;
                }
                else
                {
                    HabETA = true;
                    ShowMessage("ValidETA","No existe información del vuelo de llegada, se habilita el ingreso manual");
                    hid_HabIngManual.Value = "manualETA";
                }

                if (DatosArriboSplit[1].Length > 0)
                {
                    lblHraETD.Text = DatosArriboSplit[1];
                    lblHraETD.Visible = true;
                    HabETD = false;
                }
                else
                {
                    HabETD = true;
                    ShowMessage("ValidETD", "No existe información del vuelo de salida, se habilita el ingreso manual");
                    hid_HabIngManual.Value = "manualETD";
                }
            }

            //MostrarTATTEM(Convert.ToDateTime(DatosArriboSplit[0]), Convert.ToDateTime(DatosArriboSplit[1]), chkTransMantto.Checked);
            HabilitarIngresoManual(HabETA, HabETD);
            HabilitarCalculoTATTEM(true);
        }
        catch (Exception ex)
        {
            //ShowMessage("ExeptionPizarra","ERROR: " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>No se pudo consultar la pizarra electrónica, por favor notifique al administrador del sistema: " + ex.Message);
        }
    }

    private void HabilitarIngresoManual(bool HabilitarETA, bool HabilitarETD)
    {
        if (HabilitarETA)
        {
            txtFecETA.Visible = true;
            txtHraETA.Visible = true;
            txtFecETA.Enabled = true;
            txtHraETA.Enabled = true;

            divDatPizETA.Style.Remove("Display");
            divDatPizETA.Style.Add("Display","none");

            divDatManETA.Style.Remove("Display");
            divDatManETA.Style.Add("Display","block");            

            lblHraETA.Visible = false;            
        }
        else
        {
            txtFecETA.Visible = false;
            txtHraETA.Visible = false;
            txtFecETA.Enabled = false;
            txtHraETA.Enabled = false;


            divDatPizETA.Style.Remove("Display");
            divDatPizETA.Style.Add("Display", "block");

            divDatManETA.Style.Remove("Display");
            divDatManETA.Style.Add("Display", "none");            

            lblHraETA.Visible = true;
        }

        if (HabilitarETD)
        {
            txtFecETD.Visible = true;
            txtHraETD.Visible = true;
            txtFecETD.Enabled = true;
            txtHraETD.Enabled = true;

            divDatPizETD.Style.Remove("Display");
            divDatPizETD.Style.Add("Display","none");

            divDatManETD.Style.Remove("Display");
            divDatManETD.Style.Add("Display","block");            
            lblHraETD.Visible = false;
        }
        else
        {
            txtFecETD.Visible = false;
            txtHraETD.Visible = false;
            txtFecETD.Enabled = false;
            txtHraETD.Enabled = false;

            divDatPizETD.Style.Remove("Display");
            divDatPizETD.Style.Add("Display","block");
            
            divDatManETD.Style.Remove("Display");
            divDatManETD.Style.Add("Display", "none");            

            lblHraETD.Visible = true;
        }
    }


    


    protected void gvTrab_RowCreated(object sender, GridViewRowEventArgs e)
    {   
    }
    protected void imgRefresh_Click(object sender, ImageClickEventArgs e)
    {
        PoblarGridTrabajos();
        //ObtResumenTotalHH(Int32.Parse(hid_IdInfTra.Value), Convert.ToDecimal(StringConstantes.DEC_VAL_REP_NULL));
    }
    

    private void PoblarParticipantes(int IdTrabajoPrg)
    {      
        // Consultar Participantes
        GestorTrabajos oGesTrabajo;
        oGesTrabajo = new GestorTrabajos();
        try
        {
            gvParticipantes.DataSource = oGesTrabajo.ConsultarParticipantes(IdTrabajoPrg);
            gvParticipantes.DataBind();

            if (gvParticipantes.Rows.Count > 0)
            {
                gvParticipantes.Visible = true;
            }
        }
        catch (Exception ex)
        {
            //ShowMessage("Exception_Participante", "ERROR del Sistema " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>No se pudo consultar los participantes, por favor notifique al administrador del sistema: " + ex.Message);
        }        
    }

    protected void gvParticipantes_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GestorTblParametros oGestParam = new GestorTblParametros();
            e.Row.Cells[4].Text = oGestParam.ObtenerValorParamtroPorID(Int32.Parse(e.Row.Cells[4].Text));
            _hhPersonas = _hhPersonas + 1;
        }
    }

    //private void AjusteParamProgramacion()
    //{
    //    if (hid_TEM.Value.Length < 1)
    //    {
    //        ShowMessage("AVISO: El valor del TEM no ha sido calculado");
    //        return;
    //    }
    //    else
    //    {
    //        CalcularHHPersonal();
    //    }
    //}    
    //private void CalcularHHPersonal()
    //{
    //    decimal _hhPersonal;
    //    //_hhPersonal = ((100 - Convert.ToDecimal(txtPorcenTNP.Text)) * Convert.ToDecimal(lblTotHHPers.Text)) / 100;
    //    //decimal _tsToDecimal;
    //    string[] Dat;
    //    Dat = new string[3];
    //    Dat = hid_TEM.Value.Split(':');
    //    string _hraminTEM = Dat[0] + "." + Dat[1];
        
    //    //_tsToDecimal =        
    //    _hhPersonal = ((Convert.ToDecimal(lblTotHHPers.Text)) * (Convert.ToDecimal(_hraminTEM)) * (100 - Convert.ToDecimal(hid_PTNP.Value))) / 100;
        
    //    lblTotHHPers.Text = _hhPersonal.ToString();

    //    if (_hhPersonal < _hhTrabajos)
    //    {
    //        lblAlerta.Visible = true;
    //        lblAlerta.Text = "Se ha superado la cantidad de recursos disponibles para la programaciòn, debe asignar mas personal o retirar trabajos de la programación.";
    //    }
    //    else
    //    {
    //        lblAlerta.Visible = false;
    //        lblAlerta.Text = "";
    //    }
    //}
    protected void gvParticipantes_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Eliminar")
        {
            GestorTrabajos oGestTrab = new GestorTrabajos();
            int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow selRow = gvParticipantes.Rows[index];
            HiddenField hid = (HiddenField)selRow.FindControl("HiddenField1");
            string[] Datos;
            Datos = hid.Value.Split('|');
            try
            {
                int NumElimindos = oGestTrab.EliminarParticipante(Int32.Parse(Datos[0]), Int32.Parse(Datos[1]), -99, true);

                if (NumElimindos > 0)
                {
                    ShowMessage("Part_Elim", "Participante eliminado correctamente");
                    PoblarParticipantes(Int32.Parse(Datos[1]));
                    //PoblarGridTrabajos();
                    //AjusteParamProgramacion();
                    //ObtResumenTotalHH(Int32.Parse(hid_IdInfTra.Value), Convert.ToDecimal(StringConstantes.DEC_VAL_REP_NULL));                                
                }
                else
                    ShowMessage("Part_NoElim","Mensaje: No se pudo eliminar el participante revise los datos ingresados");
            }
            catch(Exception ex)
            {
                //ShowMessage("Exception_ElimPart", "ERROR del sistem: " + ex.Message);
                Response.Write("<strong>ERROR: <strong><br/>No se pudo eliminar al participante, por favor notifique al administrador del sistema: " + ex.Message);
            }
        }
    }
    
    protected void imgEditInforme_Click(object sender, ImageClickEventArgs e)
    {
        bool isValidData = false;
        Decimal decHHDescuentoLugarTrab;
        

        if (imgEditInforme.ToolTip == "Salvar")
        {
            if (txtJustifCambio.Text.Trim().Length > 0)
            {
                GestorTrabajos oGestTrab = new GestorTrabajos();
                oGesParam = new GestorTblParametros();
                E_Trabajo oTrabajo = new E_Trabajo();
                oTrabajo.Id = Int32.Parse(hid_IdInfTra.Value);
                oTrabajo.FechaVuelo = DateTime.Parse(txtFecVuelo.Text);
                oTrabajo.NumeroETA = txtETA.Text;
                oTrabajo.NumeroETD = txtETD.Text;


                if (chkTransMantto.Checked)
                    decHHDescuentoLugarTrab = Convert.ToDecimal(oGesParam.ObtenerValorParamtroPorID(oGesParam.ObtenerParamID(1, "TDCTOMANTTO")));
                else
                    decHHDescuentoLugarTrab = Convert.ToDecimal(oGesParam.ObtenerValorParamtroPorID(oGesParam.ObtenerParamID(1, "TDCTOPISTA")));

                oTrabajo.DctoHraLugarTrab = decHHDescuentoLugarTrab;

                if (lblHraETA.Text.Length > 0)
                {
                    if (Convert.ToDateTime(lblHraETA.Text) != DT_INVALIDA)
                    {
                        oTrabajo.HoraLlegada = DateTime.Parse(lblHraETA.Text);
                        isValidData = true;
                    }
                    else
                    {
                        if (Convert.ToDateTime(txtFecETA.Text + " " + txtHraETA.Text) != DT_INVALIDA)
                        {
                            oTrabajo.HoraLlegada = Convert.ToDateTime(txtFecETA.Text + " " + txtHraETA.Text);
                            isValidData = true;
                        }
                        else
                        {
                            ShowMessage("Edit_HraLlegada_1", "ERROR: No se ha ingresado la Hora de Llegada");
                            isValidData = false;
                        }
                    }
                }                
                else
                {
                    if (Convert.ToDateTime(txtFecETA.Text + " " + txtHraETA.Text) != DT_INVALIDA)
                    {
                        oTrabajo.HoraLlegada = Convert.ToDateTime(txtFecETA.Text + " " + txtHraETA.Text);
                        isValidData = true;
                    }
                    else
                    {
                        ShowMessage("Edit_HraLlegada_2","ERROR: No se ha ingresado la Hora de Llegada");
                        isValidData = false;
                    }
                }

                if (lblHraETD.Text.Length > 0)
                {
                    if (Convert.ToDateTime(lblHraETD.Text) != DT_INVALIDA)
                    {
                        oTrabajo.HoraSalida = DateTime.Parse(lblHraETD.Text);
                    }
                    else
                    {
                        if (Convert.ToDateTime(txtFecETD.Text + " " + txtHraETD.Text) != DT_INVALIDA)
                        {
                            oTrabajo.HoraSalida = Convert.ToDateTime(txtFecETD.Text + " " + txtHraETD.Text);
                            isValidData = true;
                        }
                        else
                        {
                            ShowMessage("Edit_HraSal_1","ERROR: No se ha ingresado la Hora de Salida");
                            isValidData = false;
                        }
                    }
                }                
                else
                {
                    if (Convert.ToDateTime(txtFecETD.Text + " " + txtHraETD.Text) != DT_INVALIDA)
                    {
                        oTrabajo.HoraSalida = Convert.ToDateTime(txtFecETD.Text + " " + txtHraETD.Text);
                        isValidData = true;
                    }
                    else
                    {
                        ShowMessage("Edit_HraSal_2","ERROR: No se ha ingresado la Hora de Salida");
                        isValidData = false;
                    }
                }

                if (hid_HabIngManual.Value.Length == 6)
                    oTrabajo.EsRegistroManual = true;
                else
                    oTrabajo.EsRegistroManual = false;

                //TODO - Cambiar el usuario que registra
                E_Usuario eUser = (E_Usuario)Session["UsuarioAuth"];
                oTrabajo.UserRegistra = eUser.UsrId;

                oTrabajo.EsTrabMantto = chkTransMantto.Checked;
                //oTrabajo.IdOrigenProg = 

                //TODO - Solicitaron quitar el motivo de cambio, ya no se mustra por lo tanto se ha puesto un valor generico
                oTrabajo.IdMotivCambio = 5; //Int32.Parse(ddlMotivoCambio.SelectedValue);
                oTrabajo.TextJustifCambio = txtJustifCambio.Text;

                //ESTADO SIEMPRE EN PROGRAMADO
                oTrabajo.IdEstadoInforme = oGesParam.ObtenerParamID(8, StringConstantes.PAR_COD_INF_PROGRAMADO);

                if (isValidData)
                {
                    try
                    {
                        if (oGestTrab.ActualizarDatosGnrlTrabajo(oTrabajo) > 0)
                        {
                            ShowMessage("Edit_GrabarOK","CONFIRMACION: Datos Grabados Satisfactoriamente");
                            DeshabilitarEdicion(true);
                            HabilitarModificacion(false);
                            imgEditInforme.ToolTip = "Activar para modificar la programación";
                            PoblarParticipantes(Int32.Parse(hid_IdInfTra.Value));
                            PoblarGridTrabajos();
                            //ObtResumenTotalHH(Int32.Parse(hid_IdInfTra.Value), Convert.ToDecimal(StringConstantes.DEC_VAL_REP_NULL));
                        }
                        else
                        {
                            ShowMessage("Edit_ErrorGrab","ERROR:No se ha podido actualizar los datos ingresados, por favor notifique al administrador del sistema");
                        }
                    }
                    catch (Exception ex)
                    {
                        //ShowMessage("Exception_EditGuardar","ERROR: Ha ocurrido un error ineseperado al guardar los datos " + ex.Message);
                        Response.Write("<strong>ERROR: <strong><br/>No se pudo guardar los datos, por favor notifique al administrador del sistema: " + ex.Message);
                    }
                }
                else
                {
                    ShowMessage("Edit_FaltaDatos","AVISO: Debe Ingresar los datos solicitados");
                }
            }
            else
            {
                ShowMessage("ObligarMotivo", "NOTA: Cuando esta modificando una programación es debe indicar el motivo del cambio");
            }
        }
        else
        {
            //ListItem lst = new ListItem();
            //lst.Text = StringConstantes.DDL_SELEC_TEXT;
            //lst.Value = StringConstantes.DDL_SELEC_VALUE;

            DeshabilitarEdicion(false);

            //GestorTblParametros oGestParam = new GestorTblParametros();
            //if (ddlMotivoCambio.Items.Count <= 0)
            //{
            //    ddlMotivoCambio.DataSource = oGestParam.ListaParametroPorGrupo(oGestParam.ObtenerParamID(10, StringConstantes.PAR_COD_BLOCK_GRUPO));
            //    ddlMotivoCambio.DataTextField = StringConstantes.DDL_BIND_PARAM_VAL_TEXT_FIELD;
            //    ddlMotivoCambio.DataValueField = StringConstantes.DDL_BIND_PARAM_VAL_VALUE_FIELD;
            //    ddlMotivoCambio.DataBind();
            //    ddlMotivoCambio.Items.Add(lst);
            //    ddlMotivoCambio.SelectedValue = StringConstantes.DDL_SELEC_VALUE;
            //}

            divMotivCambio.Style.Remove("Display");
            divMotivCambio.Style.Add("Display", "block");

            //ddlMotivoCambio.Enabled = true;
            txtJustifCambio.ReadOnly = false;
            HabilitarModificacion(true);            
            imgEditInforme.ToolTip = "Salvar";
            ShowMessage("Edit_MsgEstado","Cambiando los datos de la programación");
            PoblarParticipantes(Int32.Parse(hid_IdInfTra.Value));
            PoblarGridTrabajos();
        }
    }
    //protected void gvTrab_SelectedIndexChanged(object sender, EventArgs e)
    //{
    //    lblMensaje.Text = gvTrab.DataKeys[gvTrab.SelectedIndex].Values["Id"].ToString() + "-" + gvTrab.DataKeys[gvTrab.SelectedIndex].Values["SecuenciaTrabajo"].ToString();
    //    lblMensaje.Visible = true;
    //}
    protected void gvTrab_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        GestorTrabajos oGesTra = new GestorTrabajos();
        try
        {
            if (oGesTra.EliminarTrabajoProg(Convert.ToInt32(gvTrab.DataKeys[e.RowIndex].Values["Id"].ToString()), Convert.ToInt32(gvTrab.DataKeys[e.RowIndex].Values["SecuenciaTrabajo"].ToString())) > 0)
            {
                ShowMessage("CONFIRMACION: Trabajo Eliminado con éxito");
                //AjusteParamProgramacion();
                //ObtResumenTotalHH(Int32.Parse(hid_IdInfTra.Value), Convert.ToDecimal(StringConstantes.DEC_VAL_REP_NULL));                                
                //cargar grid
                PoblarGridTrabajos();
            }
            else
            {
                ShowMessage("No se pudo eliminar el trabajo");
            }
        }
        catch (Exception ex)
        {
            //ShowMessage("ERROR: " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>No se pudo eliminar el trabajo, por favor notifique al administrador del sistema: " + ex.Message);
        }        
    }

    private void HabilitarAccionGrabar(bool Opcion)
    {
        //btnRegistro.Enabled = false;
        if (Opcion)
        {
            imgRegInforme.ImageUrl = "../styles/a-main/BTgrabar.gif";
        }
        else
        {
            imgRegInforme.ImageUrl = "../styles/a-main/BTgrabar_Dis.gif";
        }
        imgRegInforme.Enabled = Opcion;
    }

   

    private void HabilitarAccionHabilitar(bool Opcion)
    {
        if (Opcion)
        {
            lblEstPrg.CssClass = StringConstantes.CSS_CERRADO;
            imgHabilitarPrg.ImageUrl = "../styles/a-main/BTHabilitar.gif";
        }
        else
        {
            lblEstPrg.CssClass = StringConstantes.CSS_CERRADO;
            imgHabilitarPrg.ImageUrl = "../styles/a-main/BTHabilitar_Dis.gif";
        }
        imgHabilitarPrg.Enabled = Opcion;
        imgHabilitarPrg.Visible = true;
        lblEstPrg.Visible = true;
    }

    private void HabilitarIngresoMecanicos(bool Opcion)
    {
        if (Opcion)
        {
            imgAdicionarPers.ImageUrl = "../styles/a-main/BTagregar.gif";
        }
        else
        {
            imgAdicionarPers.ImageUrl = "../styles/a-main/BTagregar_dis.gif";
        }
        imgAdicionarPers.Enabled = Opcion;
    }

    private void HabilitarIngresoTrabajos(bool Opcion)
    {
        if (Opcion)
        {
            imgReCargar.ImageUrl = "../styles/a-main/bot_trabajo_act.gif";
            imgRefresh.ImageUrl = "../styles/a-main/bot_reload_act.gif";
        }
        else
        {
            imgReCargar.ImageUrl = "../styles/a-main/bot_trabajo_dis.gif";
            imgRefresh.ImageUrl = "../styles/a-main/bot_reload_dis.gif";
        }
        imgReCargar.Enabled = Opcion;        
        imgRefresh.Enabled = Opcion;        
    }

    protected void btnAddTrab_Click(object sender, EventArgs e)
    {
        //ValidarQueSeanVueloUnicos
        GestorTblParametros oGesParam = new GestorTblParametros();
        GestorTrabajos oGesTrab = new GestorTrabajos();
        
        bool _esIngresoTATTEMManual = false;

        if (hid_HabIngManual.Value.Length == 6)
            _esIngresoTATTEMManual = true;

        if (oGesParam.ObtenerValorParamtroPorID(oGesParam.ObtenerParamID(1, "PERMREPFVLO")) != "SI")
        {
            if (oGesTrab.ValidaUnicoVueloDia(Convert.ToInt32(ddl_ProdLin.SelectedValue), StringConstantes.PREF_AVION + txtMatAvi.Text,
            Convert.ToDateTime(txtFecVuelo.Text)) != 0)
            {
                ShowMessage("ERROR: La fecha de vuelo de este avión ya ha sido programado, la fecha de vuelo no debe repetirse");
                return;
            }
        }
        ClientScriptManager csOpen = Page.ClientScript;
        csOpen.RegisterStartupScript(this.GetType(), "Aviso", "window.open('./wfPrgTrabDet.aspx','_new','');", true);
    }

    protected void imgHabilitarPrg_Click(object sender, ImageClickEventArgs e)
    {
        GestorTrabajos oGesTrab = new GestorTrabajos();
        HabilitarEliminacion(false);
        HabilitarGrabacion(false);
        HabilitarModificacion(false);
        HabilitarHabilitacion(false);
        
        //TODO PONER EL USUARIO QUE REGISTRA
        E_Usuario eUser = (E_Usuario)Session["UsuarioAuth"];
        try
        {
            if (oGesTrab.CambiarEstadoProgramacion(Int32.Parse(hid_IdInfTra.Value), eUser.UsrId, Int32.Parse(hidEstRegistro.Value), "PH") > 0)//  CerrarProgramacion(Int32.Parse(hid_IdInfTra.Value), 1) > 0)
            {
                ShowMessage("Habilitacion_OK", "AVISO: Se ha habilitado la programación");
                lblEstPrg.Text = "HABILITADO";
                //DeshabilitarCierreProg(true);
                HabilitarAccionHabilitar(false);
                HabilitarIngresoMecanicos(false);
                HabilitarIngresoTrabajos(false);
                DeshabilitarEdicion(true);                
            }
            else
            {
                ShowMessage("Habilitacion_ERROR", "ERROR: No se ha podido habilitar la programación, notifique al administrador");
                HabilitarModificacion(true);
                HabilitarHabilitacion(true);
                HabilitarEliminacion(true);
            }
        }
        catch (Exception ex)
        {
            //ShowMessage("Exception_Habilitacion","ERROR del Sistema: " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>No se pudo cambiar el estado de programación, por favor notifique al administrador del sistema: " + ex.Message);
        }        
    }
    
    //private void ObtResumenTotalHH( int IdTrabajo, decimal DecPorcenAjuste)
    //{
    //    E_SimuladorHH oSimulador = new E_SimuladorHH();
    //    oGesTrab = new GestorTrabajos();
    //    Decimal hhTotAjustado = 0;
    //    try
    //    {
    //        oSimulador.IdTrabajo = IdTrabajo;
    //        oSimulador.PorcentAjuste = DecPorcenAjuste;
    //        E_SimuladorHH oSimResult = oGesTrab.ObtDatosSimulador(oSimulador);
    //        lblTotHHTrab.Text = oSimResult.HHRequerido.ToString();
    //        lblTotHHPers.Text = (oSimResult.NumPersonas * oSimResult.HHTotalAjustadoFormatDecimal).ToString();
    //        //lblTotHHPers.Text = oSimResult.HHTotalAjustado.Hour.ToString() + ":" + oSimResult.HHTotalAjustado.Minute.ToString();
    //        //hhTotAjustado
    //        hhTotAjustado = Convert.ToDecimal(oSimResult.NumPersonas * oSimResult.HHTotalAjustadoFormatDecimal);
    //        if (oSimResult.TEM != null)
    //        {
    //            if (hhTotAjustado > 0)
    //            {
    //                if (oSimResult.HHRequerido >= hhTotAjustado)
    //                {
    //                    lblAlerta.Text = "El tiempo para trabajos programados supera al tiempo de todos los mecánicos";
    //                }
    //                else
    //                {
    //                    lblAlerta.Text = "";
    //                }
    //            }                
    //        }
    //        else
    //        {
    //            lblAlerta.Text = "TEM NO INGRESADO";
    //        }
    //    }
    //    catch (Exception ex)
    //    {
    //        //ShowMessage("Exception_Simulacion","ERROR al calcular resumen de ajustes " + ex.Message);
    //        Response.Write("<strong>ERROR: <strong><br/>No se pudo realizar el resumen de ajustes, por favor notifique al administrador del sistema: " + ex.Message);
    //    }
    //}

    protected void imgEliminarPrg_Click(object sender, ImageClickEventArgs e)
    {
        GestorTrabajos oGesTrab = new GestorTrabajos();        

        HabilitarEliminacion(false);
        HabilitarGrabacion(false);
        HabilitarModificacion(false);
        HabilitarHabilitacion(false);

        //TODO PONER EL USUARIO QUE REGISTRA
        E_Usuario eUser = (E_Usuario)Session["UsuarioAuth"];
        try
        {
            if (oGesTrab.CambiarEstadoProgramacion(Int32.Parse(hid_IdInfTra.Value), eUser.UsrId, Int32.Parse(hidEstRegistro.Value), "EL") > 0)//  CerrarProgramacion(Int32.Parse(hid_IdInfTra.Value), 1) > 0)
            {
                LimpiarControles();
                ShowMessage("Se ha Eliminado la programación");
                //ObtResumenTotalHH(Int32.Parse(hid_IdInfTra.Value), Convert.ToDecimal(StringConstantes.DEC_VAL_REP_NULL));
            }
            else
            {
                ShowMessage("ERROR: No se ha podido eliminar la programación, notifique al administrador");
                HabilitarModificacion(true);
                HabilitarHabilitacion(true);
                HabilitarEliminacion(true);                
            }
        }
        catch (Exception ex)
        {
            //ShowMessage("ERROR: El día programado ya ha sido registrado, no està permitido eliminar mas de un trabajo, por favor intente corregirlo desde la opción modificar Información Técnica: " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>No está permitido eliminar mas de un trabajo para el mismo día, por favor intente corregir la administración: " + ex.Message);
        }
    }
    protected void gvTrab_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (DataBinder.Eval(e.Row.DataItem, "TEstimComponente").ToString() != "0")
                e.Row.Cells[5].Text = DataBinder.Eval(e.Row.DataItem, "TEstimComponente").ToString();
            else
                e.Row.Cells[5].Text = DataBinder.Eval(e.Row.DataItem, "TEstimTipoTrab").ToString();
            _hhTrabajos = _hhTrabajos + Decimal.Parse(e.Row.Cells[5].Text);

            //mostrar los nombres de componentes o tipos de trabajo
            if (DataBinder.Eval(e.Row.DataItem, "ComponenteId").ToString() != "0")
            {
                GestorComponente oGesComp = new GestorComponente();
                string[] strDatosComponente;
                strDatosComponente = oGesComp.ConsultarComponente(Int32.Parse(DataBinder.Eval(e.Row.DataItem, "ComponenteId").ToString())).Split('|');
                e.Row.Cells[3].Text = strDatosComponente[4];
                e.Row.Cells[4].Text = "---";
                e.Row.Cells[2].Text = DataBinder.Eval(e.Row.DataItem, "DescTrabajo").ToString();
            }
            else
            {
                e.Row.Cells[3].Text = "---";
                GestorTipoTrabajo oGestTipoTra = new GestorTipoTrabajo();
                List<E_TipoTrabajo> lstTipTra = oGestTipoTra.ConsultarTipoTrabajo(Int32.Parse(DataBinder.Eval(e.Row.DataItem, "TipoTrabajoId").ToString()));
                E_TipoTrabajo[] oTipTra;
                oTipTra = lstTipTra.ToArray();
                e.Row.Cells[4].Text = oTipTra[0].Descripcion;
                e.Row.Cells[2].Text = oTipTra[0].Descripcion;
            }
        }
    }
    protected void imgCalcularTATTEM_Click(object sender, ImageClickEventArgs e)
    {   
        lblTATTEM.Text = "";
        DateTime dtETA;
        DateTime dtETD;
        //HabilitarGrabacion(false);
        //HabilitarModificacion(false);

        if (hid_HabIngManual.Value == "manualETAETD")
        {
            if ((txtFecETA.Text.Trim().Length != 10) && (txtHraETA.Text.Length < 3))
            {
                ShowMessage("ERROR_ETA","ERROR: Debe ingresar la fecha y hora de arribo");
                return;
            }

            if ((txtFecETD.Text.Trim().Length != 10) && (txtHraETD.Text.Length < 3))
            {
                ShowMessage("ERROR_ETD", "ERROR: Debe ingresar la fecha y hora de salida");
                return;
            }
        }
        else
        {
            if (hid_HabIngManual.Value == "manualETA")
            {
                if ((txtFecETA.Text.Trim().Length != 10) && (txtHraETA.Text.Length < 3))
                {
                    ShowMessage("ERROR_ETA_2", "ERROR: Debe ingresar la fecha y hora de arribo");
                    return;
                }
            }
            else
            {
                if (hid_HabIngManual.Value == "manualETD")
                {
                    if ((txtFecETD.Text.Trim().Length != 10) && (txtHraETD.Text.Length < 3))
                    {
                        ShowMessage("ERROR_ETD_2", "ERROR: Debe ingresar la fecha y hora de salida");
                        return;
                    }
                }
            }
        }

        try
        {
            dtETA = HH_Toolkit.ConvertirDateTime(txtFecETA.Text, txtHraETA.Text, lblHraETA.Text);
            dtETD = HH_Toolkit.ConvertirDateTime(txtFecETD.Text, txtHraETD.Text, lblHraETD.Text);

            if (dtETA != StringConstantes.DT_FEC_INVALID &&
            dtETD != StringConstantes.DT_FEC_INVALID)
            {
                if (dtETD > dtETA)
                {
                    MostrarTATTEM(dtETA, dtETD, chkTransMantto.Checked);
                    //HabilitarModificacion(true);
                    //HabilitarGrabacion(true);
                }
                else
                    ShowMessage("ERROR_ETA_Mayor", "ERROR: La fecha de arrivo debe ser menor que la fecha de partida");
            }
            else
            {
                ShowMessage("ERROR_TAT_TEM", "ERROR: No se pude obtener las horas TAT y TEM");
            }
        }
        catch (Exception ex)
        {
            //ShowMessage("ExceptionTATTEM","ERROR: No se puede calcular el TAT y TEM " + ex.Message);
            Response.Write("<strong>ERROR: <strong><br/>No se pudo calcular TAT y TEM, por favor notifique al administrador del sistema: " + ex.Message);
        }
    }

    protected void imgAdicionarPers_Click(object sender, ImageClickEventArgs e)
    {
        if (txtParticipante.Text.Trim().Length>0)
        {
            GestorTrabajos oGesTrabajo;
            oGesTrabajo = new GestorTrabajos();
            //Poblar Los detalles del trabajos
            PoblarGridTrabajos();
            //Registrar Participante Programado
            try
            {
                oGesTrabajo.RegistrarParticipantePrg(txtParticipante.Text, Int32.Parse(hid_IdInfTra.Value), Int32.Parse(ddlParticipacion.SelectedValue));
                txtParticipante.Text = "";
                //poblar Participantes
                PoblarParticipantes(Int32.Parse(hid_IdInfTra.Value));
                //ObtResumenTotalHH(Int32.Parse(hid_IdInfTra.Value), Convert.ToDecimal(StringConstantes.DEC_VAL_REP_NULL));
            }
            catch (Exception ex)
            {
                //ShowMessage("Exception_RegParticpante","ERROR del Sistema " + ex.Message);
                Response.Write("<strong>ERROR: <strong><br/>No se pudo grabar el participante, por favor notifique al administrador del sistema: " + ex.Message);
            }
        }
        else
        {
            ShowMessage("Aviso_Mec","ERROR No se ha ingresado el mecanico");
        }        
    }

    private void HabilitarGrabacion(bool hab)
    {
        imgRegInforme.Enabled = hab;
        if (hab)
        {            
            imgRegInforme.ImageUrl = "../styles/a-main/BTgrabar.gif";
        }
        else
        {
            imgRegInforme.ImageUrl = "../styles/a-main/BTgrabar_Dis.gif";
        }
    }
    private void HabilitarModificacion(bool hab)
    {
        imgEditInforme.Enabled = hab;
        if (hab)
        {            
            imgEditInforme.ImageUrl = "../styles/a-main/BTModificar.gif";
        }
        else
        {
            imgEditInforme.ImageUrl = "../styles/a-main/BTModificar_Dis.gif";
        }
    }
    private void HabilitarHabilitacion(bool hab)
    {

        imgHabilitarPrg.Enabled = hab;
        if (hab)
        {
            imgHabilitarPrg.ImageUrl = "../styles/a-main/BTHabilitar.gif";

        }
        else
        {
            imgHabilitarPrg.ImageUrl = "../styles/a-main/BTHabilitar_Dis.gif";
        }
    }
    private void HabilitarEliminacion(bool hab)
    {
        imgEliminarPrg.Enabled = hab;
        if (hab)
        {
            imgEliminarPrg.ImageUrl = "../styles/a-main/BTEliminar.gif";
        }
        else
        {   
            imgEliminarPrg.ImageUrl = "../styles/a-main/BTEliminar_Dis.gif";
        }
    }

    private void HabilitarCalculoTATTEM(bool hab)
    {
        imgCalcularTATTEM.Enabled = hab;
        if (hab)
        {
            imgCalcularTATTEM.ImageUrl = "../styles/a-main/BTCalcularTATTEM.gif";
        }
        else
        {
            imgCalcularTATTEM.ImageUrl = "../styles/a-main/BTCalcularTATTEM_Dis.gif";
        }
    }
}

